package com.ustropo.financas.conta;

import java.util.ArrayList;
import java.util.List;

import android.content.ContentValues;
import android.database.Cursor;
import android.database.sqlite.SQLiteDatabase;

import com.ustropo.financas.FinancasSQLHelper;
import com.ustropo.financas.IFinancasBancoConstantes;

/**
 * Classe que acessa o banco de dados e realiza operações
 * referentes a interface {@link IConta}
 * 
 * @author Fernando C. de Souza
 * @version 1.0
 * @since 31/10/2013
 */
public class ContaDAO {

	/* variáveis */
	private FinancasSQLHelper helper;
	private final static String COLUNAS[] = {
		IFinancasBancoConstantes.CONTAS_ID, 
		IFinancasBancoConstantes.CONTAS_NOME
	};
	
	/**
	 * 
	 * @param helper
	 */
	public ContaDAO(FinancasSQLHelper helper) {
		this.helper = helper;
	}
	
	/**
	 * Cria uma nova conta
	 * 
	 * @param nome
	 * @return conta
	 */
	public IConta createNewConta(String nome){
		ContentValues values = new ContentValues();
		
		// carrega valores
		values.put(IFinancasBancoConstantes.CONTAS_NOME, nome);
		// põe no banco de dados
		int insertId = (int)helper.getWritableDatabase().insert(IFinancasBancoConstantes.TABELA_CONTAS, 
				null, values);
		// verifica se deu certo
		IConta conta = null;
		if(insertId > -1){
			conta = new SimplesConta(insertId, nome);
		}
		
		return conta;
	}
	
	
	/**
	 * Retorna todas as {@link IConta} cadastradas no banco de dados
	 * 
	 * @return contas
	 */
	public List<IConta> getAllContas(){
		List<IConta> contas = new ArrayList<IConta>();
		
		SQLiteDatabase database = helper.getWritableDatabase();
		
		Cursor cursor = database.query(
				IFinancasBancoConstantes.TABELA_CONTAS, 
				COLUNAS, null, null, null, null, null);
		
		cursor.moveToFirst();
		while(!cursor.isAfterLast()){
			contas.add(getContaFromCursor(cursor));
			cursor.moveToNext();
		}
		
		return contas;
	}

	/**
	 * Cria uma nova {@link IConta} a partir de um cursor
	 * 
	 * @param cursor
	 * @return nova conta
	 */
	private IConta getContaFromCursor(Cursor cursor){
		int id = cursor.getInt(0);
		String nome = cursor.getString(1);
		
		return new SimplesConta(id, nome);
	}
	
}
